<!doctype html>
<html lang="en">
  <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="shortcut icon" type="image/x-icon" href="/assets/images/favicon.png">
  <link rel="canonical" href="/blog/vowpalwabbit-9.0.0.html" />
  <link rel="stylesheet" href="/assets/bootstrap-4.1.3-dist/css/bootstrap.min.css">
  <link rel="stylesheet" href="/assets/syntax.css">
  <link rel="stylesheet" href="/assets/main.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
  <link href="https://fonts.googleapis.com/css?family=Work+Sans:300,400,600&display=swap" rel="stylesheet">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"
    integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4"
    crossorigin="anonymous"></script>
  <script src="/assets/app.js"></script>
  <script type="text/javascript" src="https://js.monitor.azure.com/scripts/c/ms.analytics-web-3.min.js">
  </script>

  <title></title>
  <meta name="description" content="">
  <script>
    const analytics = new oneDS.ApplicationInsights();
    var config = {
      instrumentationKey: "734e91f5b0594dd08e2e4768fb4f9655-a7347ca4-1142-4c1e-831a-372cd2790ac0-6806",
      disableCookiesUsage: true,
      webAnalyticsConfiguration: {
        urlCollectHash: true
      }
    };
    analytics.initialize(config, []);
  </script>
</head>

  <body class="blog">
    


<div class="navbar_container  main_nav_container">
  <div class="container navbar">
    <div class="logo">
      <a href="/index.html">
        <?xml version="1.0" encoding="UTF-8"?>
<svg width="172px" height="30px" viewBox="0 0 172 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
    <title>logo_vw_horiz_gray</title>
    <desc>Created with Sketch.</desc>
    <g id="Styles" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="Desktop-Copy" transform="translate(-944.000000, -314.000000)">
            <g id="logo_vw_horiz_gray" transform="translate(941.000000, 314.000000)">
                <rect id="framework" x="0" y="0" width="175" height="30"></rect>
                <path d="M49.488,22 L46.59,22 L42.252,10.12 L44.88,10.12 L47.382,17.68 L48.066,20.02 L48.732,17.698 L51.252,10.12 L53.808,10.12 L49.488,22 Z M58.524,12.82 C59.9760073,12.82 61.106996,13.2339959 61.917,14.062 C62.7270041,14.8900041 63.132,16.0359927 63.132,17.5 C63.132,18.9640073 62.7270041,20.1099959 61.917,20.938 C61.106996,21.7660041 59.9760073,22.18 58.524,22.18 C57.0719927,22.18 55.9410041,21.7660041 55.131,20.938 C54.320996,20.1099959 53.916,18.9640073 53.916,17.5 C53.916,16.0359927 54.320996,14.8900041 55.131,14.062 C55.9410041,13.2339959 57.0719927,12.82 58.524,12.82 Z M58.524,14.656 C57.8279965,14.656 57.2970018,14.8929976 56.931,15.367 C56.5649982,15.8410024 56.382,16.5519953 56.382,17.5 C56.382,18.4480047 56.5649982,19.1589976 56.931,19.633 C57.2970018,20.1070024 57.8279965,20.344 58.524,20.344 C59.2200035,20.344 59.7509982,20.1070024 60.117,19.633 C60.4830018,19.1589976 60.666,18.4480047 60.666,17.5 C60.666,16.5519953 60.4830018,15.8410024 60.117,15.367 C59.7509982,14.8929976 59.2200035,14.656 58.524,14.656 Z M79.368,13 L76.506,22 L73.644,22 L71.682,15.646 L69.792,22 L66.948,22 L64.086,13 L66.696,13 L68.496,20.02 L70.512,13 L72.942,13 L74.958,20.02 L76.758,13 L79.368,13 Z M86.316,12.82 C87.516006,12.82 88.4579966,13.2309959 89.142,14.053 C89.8260034,14.8750041 90.168,16.0179927 90.168,17.482 C90.168,18.9580074 89.8260034,20.1099959 89.142,20.938 C88.4579966,21.7660041 87.516006,22.18 86.316,22.18 C85.6679968,22.18 85.1040024,22.0330015 84.624,21.739 C84.1439976,21.4449985 83.7660014,21.0400026 83.49,20.524 L83.49,25.78 L81.024,25.78 L81.024,13 L83.202,13 L83.292,14.782 C83.5560013,14.181997 83.9489974,13.7050018 84.471,13.351 C84.9930026,12.9969982 85.6079965,12.82 86.316,12.82 Z M85.578,20.29 C86.2500034,20.29 86.7719981,20.0500024 87.144,19.57 C87.5160019,19.0899976 87.702,18.4000045 87.702,17.5 C87.702,16.5999955 87.5160019,15.9100024 87.144,15.43 C86.7719981,14.9499976 86.2500034,14.71 85.578,14.71 C84.977997,14.71 84.4920019,14.9169979 84.12,15.331 C83.7479981,15.7450021 83.5380002,16.3359962 83.49,17.104 L83.49,17.896 C83.5380002,18.6520038 83.7479981,19.2399979 84.12,19.66 C84.4920019,20.0800021 84.977997,20.29 85.578,20.29 Z M100.518,20.506 C100.770001,20.506 100.973999,20.4820002 101.13,20.434 L100.95,21.928 C100.613998,22.0960008 100.224002,22.18 99.78,22.18 C98.6279942,22.18 97.9380011,21.7300045 97.71,20.83 C97.4459987,21.2740022 97.0380028,21.6099989 96.486,21.838 C95.9339972,22.0660011 95.2800038,22.18 94.524,22.18 C93.6479956,22.18 92.9640025,21.982002 92.472,21.586 C91.9799975,21.189998 91.734,20.6200037 91.734,19.876 C91.734,18.4119927 92.9039883,17.4640022 95.244,17.032 L97.404,16.618 L97.404,16.186 C97.404,15.7059976 97.2690014,15.3250014 96.999,15.043 C96.7289987,14.7609986 96.3540024,14.62 95.874,14.62 C95.3219972,14.62 94.8720017,14.7399988 94.524,14.98 C94.1759983,15.2200012 93.9360007,15.6099973 93.804,16.15 L91.842,15.322 C92.034001,14.5419961 92.4659966,13.9300022 93.138,13.486 C93.8100034,13.0419978 94.6859946,12.82 95.766,12.82 C97.0500064,12.82 98.0519964,13.0989972 98.772,13.657 C99.4920036,14.2150028 99.852,15.0399945 99.852,16.132 L99.852,19.822 C99.852,20.0620012 99.9059995,20.2359995 100.014,20.344 C100.122001,20.4520005 100.289999,20.506 100.518,20.506 Z M95.298,20.506 C95.8260026,20.506 96.3089978,20.3770013 96.747,20.119 C97.1850022,19.8609987 97.404,19.5100022 97.404,19.066 L97.404,18.13 L95.478,18.562 C95.069998,18.6580005 94.767001,18.7869992 94.569,18.949 C94.370999,19.1110008 94.272,19.3359986 94.272,19.624 C94.272,19.9120014 94.3619991,20.1309992 94.542,20.281 C94.7220009,20.4310007 94.9739984,20.506 95.298,20.506 Z M105.054,19.138 C105.054,19.5700022 105.116999,19.8699992 105.243,20.038 C105.369001,20.2060008 105.599998,20.29 105.936,20.29 C106.140001,20.29 106.316999,20.2750001 106.467,20.245 C106.617001,20.2149998 106.793999,20.1640004 106.998,20.092 L106.782,21.802 C106.589999,21.9220006 106.338002,22.0149997 106.026,22.081 C105.713998,22.1470003 105.408002,22.18 105.108,22.18 C104.231996,22.18 103.593002,21.9670021 103.191,21.541 C102.788998,21.1149979 102.588,20.4340047 102.588,19.498 L102.588,9.058 L105.054,9.058 L105.054,19.138 Z M118.482,22 L115.62,22 L112.164,10.12 L114.846,10.12 L117.15,20.038 L119.526,10.12 L121.902,10.12 L124.314,20.038 L126.618,10.12 L129.174,10.12 L125.718,22 L122.928,22 L121.272,15.52 L120.714,12.712 L120.678,12.712 L120.12,15.52 L118.482,22 Z M138.336,20.506 C138.588001,20.506 138.791999,20.4820002 138.948,20.434 L138.768,21.928 C138.431998,22.0960008 138.042002,22.18 137.598,22.18 C136.445994,22.18 135.756001,21.7300045 135.528,20.83 C135.263999,21.2740022 134.856003,21.6099989 134.304,21.838 C133.751997,22.0660011 133.098004,22.18 132.342,22.18 C131.465996,22.18 130.782002,21.982002 130.29,21.586 C129.797998,21.189998 129.552,20.6200037 129.552,19.876 C129.552,18.4119927 130.721988,17.4640022 133.062,17.032 L135.222,16.618 L135.222,16.186 C135.222,15.7059976 135.087001,15.3250014 134.817,15.043 C134.546999,14.7609986 134.172002,14.62 133.692,14.62 C133.139997,14.62 132.690002,14.7399988 132.342,14.98 C131.993998,15.2200012 131.754001,15.6099973 131.622,16.15 L129.66,15.322 C129.852001,14.5419961 130.283997,13.9300022 130.956,13.486 C131.628003,13.0419978 132.503995,12.82 133.584,12.82 C134.868006,12.82 135.869996,13.0989972 136.59,13.657 C137.310004,14.2150028 137.67,15.0399945 137.67,16.132 L137.67,19.822 C137.67,20.0620012 137.723999,20.2359995 137.832,20.344 C137.940001,20.4520005 138.107999,20.506 138.336,20.506 Z M133.116,20.506 C133.644003,20.506 134.126998,20.3770013 134.565,20.119 C135.003002,19.8609987 135.222,19.5100022 135.222,19.066 L135.222,18.13 L133.296,18.562 C132.887998,18.6580005 132.585001,18.7869992 132.387,18.949 C132.188999,19.1110008 132.09,19.3359986 132.09,19.624 C132.09,19.9120014 132.179999,20.1309992 132.36,20.281 C132.540001,20.4310007 132.791998,20.506 133.116,20.506 Z M145.734,12.82 C146.934006,12.82 147.875997,13.2339959 148.56,14.062 C149.244003,14.8900041 149.586,16.0419926 149.586,17.518 C149.586,18.9820073 149.244003,20.1249959 148.56,20.947 C147.875997,21.7690041 146.934006,22.18 145.734,22.18 C145.025996,22.18 144.411003,22.0030018 143.889,21.649 C143.366997,21.2949982 142.974001,20.818003 142.71,20.218 L142.62,22 L140.442,22 L140.442,9.058 L142.908,9.058 L142.908,14.476 C143.184001,13.9599974 143.561998,13.5550015 144.042,13.261 C144.522002,12.9669985 145.085997,12.82 145.734,12.82 Z M144.996,20.29 C145.668003,20.29 146.189998,20.0500024 146.562,19.57 C146.934002,19.0899976 147.12,18.4000045 147.12,17.5 C147.12,16.5999955 146.934002,15.9100024 146.562,15.43 C146.189998,14.9499976 145.668003,14.71 144.996,14.71 C144.395997,14.71 143.910002,14.9199979 143.538,15.34 C143.165998,15.7600021 142.956,16.3479962 142.908,17.104 L142.908,17.896 C142.956,18.6640038 143.165998,19.2549979 143.538,19.669 C143.910002,20.0830021 144.395997,20.29 144.996,20.29 Z M157.056,12.82 C158.256006,12.82 159.197997,13.2339959 159.882,14.062 C160.566003,14.8900041 160.908,16.0419926 160.908,17.518 C160.908,18.9820073 160.566003,20.1249959 159.882,20.947 C159.197997,21.7690041 158.256006,22.18 157.056,22.18 C156.347996,22.18 155.733003,22.0030018 155.211,21.649 C154.688997,21.2949982 154.296001,20.818003 154.032,20.218 L153.942,22 L151.764,22 L151.764,9.058 L154.23,9.058 L154.23,14.476 C154.506001,13.9599974 154.883998,13.5550015 155.364,13.261 C155.844002,12.9669985 156.407997,12.82 157.056,12.82 Z M156.318,20.29 C156.990003,20.29 157.511998,20.0500024 157.884,19.57 C158.256002,19.0899976 158.442,18.4000045 158.442,17.5 C158.442,16.5999955 158.256002,15.9100024 157.884,15.43 C157.511998,14.9499976 156.990003,14.71 156.318,14.71 C155.717997,14.71 155.232002,14.9199979 154.86,15.34 C154.487998,15.7600021 154.278,16.3479962 154.23,17.104 L154.23,17.896 C154.278,18.6640038 154.487998,19.2549979 154.86,19.669 C155.232002,20.0830021 155.717997,20.29 156.318,20.29 Z M164.328,11.704 C163.307995,11.704 162.798,11.2660044 162.798,10.39 C162.798,9.50199556 163.307995,9.058 164.328,9.058 C165.348005,9.058 165.858,9.50199556 165.858,10.39 C165.858,11.2660044 165.348005,11.704 164.328,11.704 Z M165.552,22 L163.086,22 L163.086,13 L165.552,13 L165.552,22 Z M174.336,21.442 C174.047999,21.6700011 173.685002,21.8499993 173.247,21.982 C172.808998,22.1140007 172.350002,22.18 171.87,22.18 C169.86599,22.18 168.864,21.2740091 168.864,19.462 L168.864,14.836 L167.226,14.836 L167.226,13 L168.864,13 L168.864,10.93 L171.33,10.246 L171.33,13 L174.246,13 L174.246,14.836 L171.33,14.836 L171.33,19.066 C171.33,19.8940041 171.743996,20.308 172.572,20.308 C173.100003,20.308 173.561998,20.1400017 173.958,19.804 L174.336,21.442 Z" id="VowpalWabbit" fill="#333333" fill-rule="nonzero"></path>
                <g id="logo_vw_color" transform="translate(3.000000, 0.000000)" fill="#2A3B93">
                    <path d="M27.9875518,16.6117194 C27.9875518,9.21947752 21.9666728,9.36035971 21.9666728,9.36035971 C21.3736977,6.15536974 20.3362508,3.5963294 19.3414955,1.96947553 C18.1790857,0.436543115 17.3241355,0 17.3241355,0 C16.2887633,0.700737156 15.7766231,3.93943024 15.7766231,3.93943024 C14.1726939,1.18184505 12.329851,1.05294263 12.329851,1.05294263 C9.93824094,8.37466357 17.0427696,11.1203489 17.0427696,11.1203489 C9.97542657,11.1203489 6.33307087,15.0400524 4.59284756,17.9877167 C4.0042614,19.0524794 3.60319929,20.0302689 3.35048069,20.7371557 L2.99801525,21.8605394 C1.89952322,21.2108361 0.011355398,21.1878349 0.011355398,21.1878349 C-0.278708419,29.2136474 5.0845596,28.0167877 5.0845596,28.0167877 C5.0845596,29.1432063 6.56177043,30 6.56177043,30 L18.0978518,30 C18.0978518,30 17.9248509,28.5478912 16.7183131,27.7616983 C16.5196972,27.4693917 16.4533057,27.212705 16.6897456,26.9422016 C17.354698,26.1816454 17.8296525,27.1798804 17.8296525,27.1798804 L18.3302221,27.8553801 C19.7539686,29.627988 20.7440159,29.9516816 21.1646284,30 L21.391732,30 C20.5763614,27.5009384 20.6054875,25.3190215 20.6054875,25.3190215 C20.4822802,22.1365535 22.8107704,19.2166024 22.8107704,19.2166024 C28.5084697,19.2166024 27.9875518,16.6117194 27.9875518,16.6117194" id="logo_rabbit"></path>
                </g>
            </g>
        </g>
    </g>
</svg>
      </a>
    </div>

    <div class="nav">
      <a
        href="/start.html"
        class=''
      >
        Get started
      </a>
      <a
        href="/features.html"
        class=''
      >
        Features
      </a>
      <a
        href="/tutorials.html"
        class=''
      >
        Tutorials
      </a>
      <a
        href="/blog.html"
        class='active'
      >
        Blog
      </a>
      <a
        href="/research.html"
        class=''
      >
        Research
      </a>
      <div class="external_links">
        <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/index.html">
          Docs
        </a>

        <a
          href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki"
          target="_blank"
        >
          Wiki
        </a>

        <a
          href="https://github.com/VowpalWabbit/vowpal_wabbit"
          target="_blank"
          class="github_link"
        >
          <?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Generator: Sketch 53 (72520) - https://sketchapp.com -->
    <title>GitHub</title>
    <desc>Created with Sketch.</desc>
    <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="HD_Desktop_header_Home" transform="translate(-1538.000000, -58.000000)" fill="#FFFFFF">
            <g id="Header">
                <path d="M1568,73.7951128 C1567.94603,74.2583723 1567.89891,74.7224863 1567.83682,75.1847206 C1567.56271,77.2238487 1566.86543,79.1138828 1565.7732,80.8526868 C1564.55268,82.7956941 1562.9969,84.4188114 1561.05088,85.6538569 C1560.03339,86.2996179 1558.94817,86.8066231 1557.80753,87.1895684 C1557.17559,87.4016322 1556.73848,87.0743943 1556.73531,86.4093237 C1556.72907,85.1020808 1556.73745,83.7947524 1556.73164,82.487424 C1556.72804,81.6908602 1556.64825,80.9063436 1556.21259,80.2087201 C1556.0855,80.0052003 1555.92463,79.8226135 1555.77393,79.6234512 C1556.35935,79.5140871 1556.9463,79.4362506 1557.51632,79.2916849 C1559.04696,78.9034423 1560.41543,78.2275208 1561.34791,76.8924242 C1562.03287,75.9115647 1562.34632,74.7851144 1562.48436,73.6108172 C1562.59169,72.6982249 1562.62222,71.7826422 1562.42971,70.8740656 C1562.23608,69.9599354 1561.84044,69.1418405 1561.22834,68.4359293 C1561.07756,68.2620575 1561.04763,68.1215929 1561.12221,67.896713 C1561.52468,66.6818314 1561.3562,65.491984 1560.9042,64.3262309 C1560.87829,64.2595017 1560.76574,64.1973008 1560.68569,64.1853391 C1560.15364,64.1058793 1559.65196,64.2559986 1559.18533,64.4761793 C1558.42904,64.8332361 1557.69764,65.242668 1556.9487,65.6159585 C1556.82229,65.6790137 1556.64782,65.7219904 1556.51706,65.6889249 C1554.16941,65.0964789 1551.82595,65.097077 1549.47805,65.6883268 C1549.34078,65.7228448 1549.14638,65.677134 1549.02331,65.5987849 C1548.07109,64.9919849 1547.06446,64.5120644 1545.97001,64.2236166 C1545.9511,64.218661 1545.93272,64.2115694 1545.91364,64.2077246 C1545.22551,64.0670892 1545.09971,64.1456947 1544.9036,64.8108506 C1544.58682,65.884755 1544.5296,66.9550708 1544.90668,68.0296587 C1544.93627,68.1139033 1544.90129,68.2616303 1544.8404,68.3306664 C1543.60397,69.7341156 1543.31096,71.3989279 1543.46559,73.1936101 C1543.55933,74.2817831 1543.81162,75.3262104 1544.29869,76.3083514 C1544.97176,77.6654063 1546.11181,78.4952066 1547.4926,78.982475 C1548.35956,79.2884382 1549.27852,79.4473579 1550.18824,79.6758264 C1550.19526,79.6319098 1550.20056,79.6666842 1550.18568,79.6820635 C1549.71726,80.1697591 1549.45556,80.755028 1549.34531,81.4170227 C1549.33137,81.5007546 1549.27365,81.6203716 1549.20685,81.6454912 C1548.16482,82.0372369 1547.11706,82.2433199 1546.08683,81.6149888 C1545.61867,81.3295314 1545.27683,80.9169382 1545.00101,80.4479541 C1544.56852,79.712395 1543.95864,79.179074 1543.13923,78.9361661 C1542.84434,78.8487602 1542.50823,78.8709748 1542.19359,78.8892591 C1541.97909,78.9018189 1541.90862,79.062362 1542.05256,79.2422147 C1542.18529,79.4077988 1542.32025,79.5950849 1542.4978,79.6971865 C1543.28625,80.1507913 1543.72798,80.8753286 1544.08881,81.6641173 C1544.30382,82.1341266 1544.48812,82.6140471 1544.88675,82.9753759 C1545.52169,83.5510755 1546.29115,83.7682658 1547.11612,83.8044072 C1547.81434,83.834995 1548.51496,83.8107298 1549.24722,83.8107298 C1549.24611,83.8009041 1549.26073,83.8742123 1549.26167,83.9476058 C1549.27211,84.7377616 1549.2828,85.5279173 1549.28844,86.3180731 C1549.294,87.0913115 1548.82935,87.4109452 1548.0952,87.1563319 C1544.28705,85.8355039 1541.4928,83.3342269 1539.62819,79.7992882 C1538.22405,77.1372118 1537.78027,74.2780237 1538.09739,71.2935795 C1538.4294,68.1688416 1539.66702,65.4337134 1541.73193,63.0872551 C1543.89022,60.6347648 1546.57714,59.0045559 1549.78825,58.3523869 C1554.45335,57.4048494 1558.71409,58.3562318 1562.44442,61.3515269 C1565.27245,63.6222848 1567.02271,66.5767393 1567.72914,70.1361141 C1567.83314,70.6605492 1567.87265,71.197715 1567.94398,71.7286436 C1567.95792,71.832625 1567.9811,71.9354102 1568,72.0387934 L1568,73.7951128 Z" id="GitHub"></path>
            </g>
        </g>
    </g>
</svg>
          <div>
            GitHub
          </div>
        </a>
      </div>
    </div>
  </div>
</div>




<div class="navbar_container  mobile_nav_container">
  <div class="container navbar">
    <div class="hamburger_icon">
      <?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="16px" viewBox="0 0 18 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Generator: sketchtool 57.1 (101010) - https://sketch.com -->
    <title>8049A6A1-2687-43E9-9B5D-E205E8F9E871</title>
    <desc>Created with sketchtool.</desc>
    <g id="Pages" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
        <g id="Mobile_home" transform="translate(-12.000000, -56.000000)" stroke="#FFFFFF" stroke-width="2">
            <g id="header">
                <g id="ui_header_mobile_dk" transform="translate(12.000000, 44.000000)">
                    <g id="icon_menu" transform="translate(1.000000, 12.500000)">
                        <g id="Line">
                            <path d="M16,0.5 L0,0.5"></path>
                            <path d="M16,7.5 L0,7.5"></path>
                            <path d="M16,14.5 L0,14.5"></path>
                        </g>
                    </g>
                </g>
            </g>
        </g>
    </g>
</svg>
    </div>
    <div class="logo">
      <a href="/index.html">
        <?xml version="1.0" encoding="UTF-8"?>
<svg width="172px" height="30px" viewBox="0 0 172 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
    <title>logo_vw_horiz_gray</title>
    <desc>Created with Sketch.</desc>
    <g id="Styles" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="Desktop-Copy" transform="translate(-944.000000, -314.000000)">
            <g id="logo_vw_horiz_gray" transform="translate(941.000000, 314.000000)">
                <rect id="framework" x="0" y="0" width="175" height="30"></rect>
                <path d="M49.488,22 L46.59,22 L42.252,10.12 L44.88,10.12 L47.382,17.68 L48.066,20.02 L48.732,17.698 L51.252,10.12 L53.808,10.12 L49.488,22 Z M58.524,12.82 C59.9760073,12.82 61.106996,13.2339959 61.917,14.062 C62.7270041,14.8900041 63.132,16.0359927 63.132,17.5 C63.132,18.9640073 62.7270041,20.1099959 61.917,20.938 C61.106996,21.7660041 59.9760073,22.18 58.524,22.18 C57.0719927,22.18 55.9410041,21.7660041 55.131,20.938 C54.320996,20.1099959 53.916,18.9640073 53.916,17.5 C53.916,16.0359927 54.320996,14.8900041 55.131,14.062 C55.9410041,13.2339959 57.0719927,12.82 58.524,12.82 Z M58.524,14.656 C57.8279965,14.656 57.2970018,14.8929976 56.931,15.367 C56.5649982,15.8410024 56.382,16.5519953 56.382,17.5 C56.382,18.4480047 56.5649982,19.1589976 56.931,19.633 C57.2970018,20.1070024 57.8279965,20.344 58.524,20.344 C59.2200035,20.344 59.7509982,20.1070024 60.117,19.633 C60.4830018,19.1589976 60.666,18.4480047 60.666,17.5 C60.666,16.5519953 60.4830018,15.8410024 60.117,15.367 C59.7509982,14.8929976 59.2200035,14.656 58.524,14.656 Z M79.368,13 L76.506,22 L73.644,22 L71.682,15.646 L69.792,22 L66.948,22 L64.086,13 L66.696,13 L68.496,20.02 L70.512,13 L72.942,13 L74.958,20.02 L76.758,13 L79.368,13 Z M86.316,12.82 C87.516006,12.82 88.4579966,13.2309959 89.142,14.053 C89.8260034,14.8750041 90.168,16.0179927 90.168,17.482 C90.168,18.9580074 89.8260034,20.1099959 89.142,20.938 C88.4579966,21.7660041 87.516006,22.18 86.316,22.18 C85.6679968,22.18 85.1040024,22.0330015 84.624,21.739 C84.1439976,21.4449985 83.7660014,21.0400026 83.49,20.524 L83.49,25.78 L81.024,25.78 L81.024,13 L83.202,13 L83.292,14.782 C83.5560013,14.181997 83.9489974,13.7050018 84.471,13.351 C84.9930026,12.9969982 85.6079965,12.82 86.316,12.82 Z M85.578,20.29 C86.2500034,20.29 86.7719981,20.0500024 87.144,19.57 C87.5160019,19.0899976 87.702,18.4000045 87.702,17.5 C87.702,16.5999955 87.5160019,15.9100024 87.144,15.43 C86.7719981,14.9499976 86.2500034,14.71 85.578,14.71 C84.977997,14.71 84.4920019,14.9169979 84.12,15.331 C83.7479981,15.7450021 83.5380002,16.3359962 83.49,17.104 L83.49,17.896 C83.5380002,18.6520038 83.7479981,19.2399979 84.12,19.66 C84.4920019,20.0800021 84.977997,20.29 85.578,20.29 Z M100.518,20.506 C100.770001,20.506 100.973999,20.4820002 101.13,20.434 L100.95,21.928 C100.613998,22.0960008 100.224002,22.18 99.78,22.18 C98.6279942,22.18 97.9380011,21.7300045 97.71,20.83 C97.4459987,21.2740022 97.0380028,21.6099989 96.486,21.838 C95.9339972,22.0660011 95.2800038,22.18 94.524,22.18 C93.6479956,22.18 92.9640025,21.982002 92.472,21.586 C91.9799975,21.189998 91.734,20.6200037 91.734,19.876 C91.734,18.4119927 92.9039883,17.4640022 95.244,17.032 L97.404,16.618 L97.404,16.186 C97.404,15.7059976 97.2690014,15.3250014 96.999,15.043 C96.7289987,14.7609986 96.3540024,14.62 95.874,14.62 C95.3219972,14.62 94.8720017,14.7399988 94.524,14.98 C94.1759983,15.2200012 93.9360007,15.6099973 93.804,16.15 L91.842,15.322 C92.034001,14.5419961 92.4659966,13.9300022 93.138,13.486 C93.8100034,13.0419978 94.6859946,12.82 95.766,12.82 C97.0500064,12.82 98.0519964,13.0989972 98.772,13.657 C99.4920036,14.2150028 99.852,15.0399945 99.852,16.132 L99.852,19.822 C99.852,20.0620012 99.9059995,20.2359995 100.014,20.344 C100.122001,20.4520005 100.289999,20.506 100.518,20.506 Z M95.298,20.506 C95.8260026,20.506 96.3089978,20.3770013 96.747,20.119 C97.1850022,19.8609987 97.404,19.5100022 97.404,19.066 L97.404,18.13 L95.478,18.562 C95.069998,18.6580005 94.767001,18.7869992 94.569,18.949 C94.370999,19.1110008 94.272,19.3359986 94.272,19.624 C94.272,19.9120014 94.3619991,20.1309992 94.542,20.281 C94.7220009,20.4310007 94.9739984,20.506 95.298,20.506 Z M105.054,19.138 C105.054,19.5700022 105.116999,19.8699992 105.243,20.038 C105.369001,20.2060008 105.599998,20.29 105.936,20.29 C106.140001,20.29 106.316999,20.2750001 106.467,20.245 C106.617001,20.2149998 106.793999,20.1640004 106.998,20.092 L106.782,21.802 C106.589999,21.9220006 106.338002,22.0149997 106.026,22.081 C105.713998,22.1470003 105.408002,22.18 105.108,22.18 C104.231996,22.18 103.593002,21.9670021 103.191,21.541 C102.788998,21.1149979 102.588,20.4340047 102.588,19.498 L102.588,9.058 L105.054,9.058 L105.054,19.138 Z M118.482,22 L115.62,22 L112.164,10.12 L114.846,10.12 L117.15,20.038 L119.526,10.12 L121.902,10.12 L124.314,20.038 L126.618,10.12 L129.174,10.12 L125.718,22 L122.928,22 L121.272,15.52 L120.714,12.712 L120.678,12.712 L120.12,15.52 L118.482,22 Z M138.336,20.506 C138.588001,20.506 138.791999,20.4820002 138.948,20.434 L138.768,21.928 C138.431998,22.0960008 138.042002,22.18 137.598,22.18 C136.445994,22.18 135.756001,21.7300045 135.528,20.83 C135.263999,21.2740022 134.856003,21.6099989 134.304,21.838 C133.751997,22.0660011 133.098004,22.18 132.342,22.18 C131.465996,22.18 130.782002,21.982002 130.29,21.586 C129.797998,21.189998 129.552,20.6200037 129.552,19.876 C129.552,18.4119927 130.721988,17.4640022 133.062,17.032 L135.222,16.618 L135.222,16.186 C135.222,15.7059976 135.087001,15.3250014 134.817,15.043 C134.546999,14.7609986 134.172002,14.62 133.692,14.62 C133.139997,14.62 132.690002,14.7399988 132.342,14.98 C131.993998,15.2200012 131.754001,15.6099973 131.622,16.15 L129.66,15.322 C129.852001,14.5419961 130.283997,13.9300022 130.956,13.486 C131.628003,13.0419978 132.503995,12.82 133.584,12.82 C134.868006,12.82 135.869996,13.0989972 136.59,13.657 C137.310004,14.2150028 137.67,15.0399945 137.67,16.132 L137.67,19.822 C137.67,20.0620012 137.723999,20.2359995 137.832,20.344 C137.940001,20.4520005 138.107999,20.506 138.336,20.506 Z M133.116,20.506 C133.644003,20.506 134.126998,20.3770013 134.565,20.119 C135.003002,19.8609987 135.222,19.5100022 135.222,19.066 L135.222,18.13 L133.296,18.562 C132.887998,18.6580005 132.585001,18.7869992 132.387,18.949 C132.188999,19.1110008 132.09,19.3359986 132.09,19.624 C132.09,19.9120014 132.179999,20.1309992 132.36,20.281 C132.540001,20.4310007 132.791998,20.506 133.116,20.506 Z M145.734,12.82 C146.934006,12.82 147.875997,13.2339959 148.56,14.062 C149.244003,14.8900041 149.586,16.0419926 149.586,17.518 C149.586,18.9820073 149.244003,20.1249959 148.56,20.947 C147.875997,21.7690041 146.934006,22.18 145.734,22.18 C145.025996,22.18 144.411003,22.0030018 143.889,21.649 C143.366997,21.2949982 142.974001,20.818003 142.71,20.218 L142.62,22 L140.442,22 L140.442,9.058 L142.908,9.058 L142.908,14.476 C143.184001,13.9599974 143.561998,13.5550015 144.042,13.261 C144.522002,12.9669985 145.085997,12.82 145.734,12.82 Z M144.996,20.29 C145.668003,20.29 146.189998,20.0500024 146.562,19.57 C146.934002,19.0899976 147.12,18.4000045 147.12,17.5 C147.12,16.5999955 146.934002,15.9100024 146.562,15.43 C146.189998,14.9499976 145.668003,14.71 144.996,14.71 C144.395997,14.71 143.910002,14.9199979 143.538,15.34 C143.165998,15.7600021 142.956,16.3479962 142.908,17.104 L142.908,17.896 C142.956,18.6640038 143.165998,19.2549979 143.538,19.669 C143.910002,20.0830021 144.395997,20.29 144.996,20.29 Z M157.056,12.82 C158.256006,12.82 159.197997,13.2339959 159.882,14.062 C160.566003,14.8900041 160.908,16.0419926 160.908,17.518 C160.908,18.9820073 160.566003,20.1249959 159.882,20.947 C159.197997,21.7690041 158.256006,22.18 157.056,22.18 C156.347996,22.18 155.733003,22.0030018 155.211,21.649 C154.688997,21.2949982 154.296001,20.818003 154.032,20.218 L153.942,22 L151.764,22 L151.764,9.058 L154.23,9.058 L154.23,14.476 C154.506001,13.9599974 154.883998,13.5550015 155.364,13.261 C155.844002,12.9669985 156.407997,12.82 157.056,12.82 Z M156.318,20.29 C156.990003,20.29 157.511998,20.0500024 157.884,19.57 C158.256002,19.0899976 158.442,18.4000045 158.442,17.5 C158.442,16.5999955 158.256002,15.9100024 157.884,15.43 C157.511998,14.9499976 156.990003,14.71 156.318,14.71 C155.717997,14.71 155.232002,14.9199979 154.86,15.34 C154.487998,15.7600021 154.278,16.3479962 154.23,17.104 L154.23,17.896 C154.278,18.6640038 154.487998,19.2549979 154.86,19.669 C155.232002,20.0830021 155.717997,20.29 156.318,20.29 Z M164.328,11.704 C163.307995,11.704 162.798,11.2660044 162.798,10.39 C162.798,9.50199556 163.307995,9.058 164.328,9.058 C165.348005,9.058 165.858,9.50199556 165.858,10.39 C165.858,11.2660044 165.348005,11.704 164.328,11.704 Z M165.552,22 L163.086,22 L163.086,13 L165.552,13 L165.552,22 Z M174.336,21.442 C174.047999,21.6700011 173.685002,21.8499993 173.247,21.982 C172.808998,22.1140007 172.350002,22.18 171.87,22.18 C169.86599,22.18 168.864,21.2740091 168.864,19.462 L168.864,14.836 L167.226,14.836 L167.226,13 L168.864,13 L168.864,10.93 L171.33,10.246 L171.33,13 L174.246,13 L174.246,14.836 L171.33,14.836 L171.33,19.066 C171.33,19.8940041 171.743996,20.308 172.572,20.308 C173.100003,20.308 173.561998,20.1400017 173.958,19.804 L174.336,21.442 Z" id="VowpalWabbit" fill="#333333" fill-rule="nonzero"></path>
                <g id="logo_vw_color" transform="translate(3.000000, 0.000000)" fill="#2A3B93">
                    <path d="M27.9875518,16.6117194 C27.9875518,9.21947752 21.9666728,9.36035971 21.9666728,9.36035971 C21.3736977,6.15536974 20.3362508,3.5963294 19.3414955,1.96947553 C18.1790857,0.436543115 17.3241355,0 17.3241355,0 C16.2887633,0.700737156 15.7766231,3.93943024 15.7766231,3.93943024 C14.1726939,1.18184505 12.329851,1.05294263 12.329851,1.05294263 C9.93824094,8.37466357 17.0427696,11.1203489 17.0427696,11.1203489 C9.97542657,11.1203489 6.33307087,15.0400524 4.59284756,17.9877167 C4.0042614,19.0524794 3.60319929,20.0302689 3.35048069,20.7371557 L2.99801525,21.8605394 C1.89952322,21.2108361 0.011355398,21.1878349 0.011355398,21.1878349 C-0.278708419,29.2136474 5.0845596,28.0167877 5.0845596,28.0167877 C5.0845596,29.1432063 6.56177043,30 6.56177043,30 L18.0978518,30 C18.0978518,30 17.9248509,28.5478912 16.7183131,27.7616983 C16.5196972,27.4693917 16.4533057,27.212705 16.6897456,26.9422016 C17.354698,26.1816454 17.8296525,27.1798804 17.8296525,27.1798804 L18.3302221,27.8553801 C19.7539686,29.627988 20.7440159,29.9516816 21.1646284,30 L21.391732,30 C20.5763614,27.5009384 20.6054875,25.3190215 20.6054875,25.3190215 C20.4822802,22.1365535 22.8107704,19.2166024 22.8107704,19.2166024 C28.5084697,19.2166024 27.9875518,16.6117194 27.9875518,16.6117194" id="logo_rabbit"></path>
                </g>
            </g>
        </g>
    </g>
</svg>
      </a>
    </div>
  </div>
</div>

<div class="mobile_nav">
  <button type="button" class="go_back_button">
    <
  </button>

  <a href="/start.html" class=''>
    Get started
  </a>
  <a
    href="/features.html"
    class=''
  >
    Features
  </a>
  <a href="/tutorials.html" class=''>
    Tutorials
  </a>
  <a
    href="/blog.html"
    class='active'
  >
    Blog
  </a>
  <a href="/research.html" class=''>
    Research
  </a>
  <div class="external_links">
    <a
      href="https://github.com/VowpalWabbit/vowpalwabbit.github.io/issues/new"
      target="_blank"
    >
      Feedback
    </a>

    <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/index.html">
      Docs
    </a>

    <a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki" target="_blank">
      Wiki
    </a>

    <a href="https://github.com/VowpalWabbit/vowpal_wabbit" target="_blank" class="github_link">
      <?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Generator: Sketch 53 (72520) - https://sketchapp.com -->
    <title>GitHub</title>
    <desc>Created with Sketch.</desc>
    <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="HD_Desktop_header_Home" transform="translate(-1538.000000, -58.000000)" fill="#FFFFFF">
            <g id="Header">
                <path d="M1568,73.7951128 C1567.94603,74.2583723 1567.89891,74.7224863 1567.83682,75.1847206 C1567.56271,77.2238487 1566.86543,79.1138828 1565.7732,80.8526868 C1564.55268,82.7956941 1562.9969,84.4188114 1561.05088,85.6538569 C1560.03339,86.2996179 1558.94817,86.8066231 1557.80753,87.1895684 C1557.17559,87.4016322 1556.73848,87.0743943 1556.73531,86.4093237 C1556.72907,85.1020808 1556.73745,83.7947524 1556.73164,82.487424 C1556.72804,81.6908602 1556.64825,80.9063436 1556.21259,80.2087201 C1556.0855,80.0052003 1555.92463,79.8226135 1555.77393,79.6234512 C1556.35935,79.5140871 1556.9463,79.4362506 1557.51632,79.2916849 C1559.04696,78.9034423 1560.41543,78.2275208 1561.34791,76.8924242 C1562.03287,75.9115647 1562.34632,74.7851144 1562.48436,73.6108172 C1562.59169,72.6982249 1562.62222,71.7826422 1562.42971,70.8740656 C1562.23608,69.9599354 1561.84044,69.1418405 1561.22834,68.4359293 C1561.07756,68.2620575 1561.04763,68.1215929 1561.12221,67.896713 C1561.52468,66.6818314 1561.3562,65.491984 1560.9042,64.3262309 C1560.87829,64.2595017 1560.76574,64.1973008 1560.68569,64.1853391 C1560.15364,64.1058793 1559.65196,64.2559986 1559.18533,64.4761793 C1558.42904,64.8332361 1557.69764,65.242668 1556.9487,65.6159585 C1556.82229,65.6790137 1556.64782,65.7219904 1556.51706,65.6889249 C1554.16941,65.0964789 1551.82595,65.097077 1549.47805,65.6883268 C1549.34078,65.7228448 1549.14638,65.677134 1549.02331,65.5987849 C1548.07109,64.9919849 1547.06446,64.5120644 1545.97001,64.2236166 C1545.9511,64.218661 1545.93272,64.2115694 1545.91364,64.2077246 C1545.22551,64.0670892 1545.09971,64.1456947 1544.9036,64.8108506 C1544.58682,65.884755 1544.5296,66.9550708 1544.90668,68.0296587 C1544.93627,68.1139033 1544.90129,68.2616303 1544.8404,68.3306664 C1543.60397,69.7341156 1543.31096,71.3989279 1543.46559,73.1936101 C1543.55933,74.2817831 1543.81162,75.3262104 1544.29869,76.3083514 C1544.97176,77.6654063 1546.11181,78.4952066 1547.4926,78.982475 C1548.35956,79.2884382 1549.27852,79.4473579 1550.18824,79.6758264 C1550.19526,79.6319098 1550.20056,79.6666842 1550.18568,79.6820635 C1549.71726,80.1697591 1549.45556,80.755028 1549.34531,81.4170227 C1549.33137,81.5007546 1549.27365,81.6203716 1549.20685,81.6454912 C1548.16482,82.0372369 1547.11706,82.2433199 1546.08683,81.6149888 C1545.61867,81.3295314 1545.27683,80.9169382 1545.00101,80.4479541 C1544.56852,79.712395 1543.95864,79.179074 1543.13923,78.9361661 C1542.84434,78.8487602 1542.50823,78.8709748 1542.19359,78.8892591 C1541.97909,78.9018189 1541.90862,79.062362 1542.05256,79.2422147 C1542.18529,79.4077988 1542.32025,79.5950849 1542.4978,79.6971865 C1543.28625,80.1507913 1543.72798,80.8753286 1544.08881,81.6641173 C1544.30382,82.1341266 1544.48812,82.6140471 1544.88675,82.9753759 C1545.52169,83.5510755 1546.29115,83.7682658 1547.11612,83.8044072 C1547.81434,83.834995 1548.51496,83.8107298 1549.24722,83.8107298 C1549.24611,83.8009041 1549.26073,83.8742123 1549.26167,83.9476058 C1549.27211,84.7377616 1549.2828,85.5279173 1549.28844,86.3180731 C1549.294,87.0913115 1548.82935,87.4109452 1548.0952,87.1563319 C1544.28705,85.8355039 1541.4928,83.3342269 1539.62819,79.7992882 C1538.22405,77.1372118 1537.78027,74.2780237 1538.09739,71.2935795 C1538.4294,68.1688416 1539.66702,65.4337134 1541.73193,63.0872551 C1543.89022,60.6347648 1546.57714,59.0045559 1549.78825,58.3523869 C1554.45335,57.4048494 1558.71409,58.3562318 1562.44442,61.3515269 C1565.27245,63.6222848 1567.02271,66.5767393 1567.72914,70.1361141 C1567.83314,70.6605492 1567.87265,71.197715 1567.94398,71.7286436 C1567.95792,71.832625 1567.9811,71.9354102 1568,72.0387934 L1568,73.7951128 Z" id="GitHub"></path>
            </g>
        </g>
    </g>
</svg>
      <div>
        GitHub
      </div>
    </a>
  </div>
</div>

<script src="/assets/js/header.js"></script>


    <div class="hero">
      <div class="container">
        <div class="row">
          <div class="col-lg-6">
            <h1>
              Blog
            </h1>
            <a href="/blog.html">
              < Back to blog
            </a>
          </div>
        </div>
      </div>
    </div>

    <div class="container content blog_container">
      <div class="row">
        <div class="col-lg-9">
          <div class="blog_date">
            January 28, 2022
          </div>
          <div class="blog_title">
            <h1>
              VowpalWabbit 9.0.0 Release Notes
            </h1>
          </div>
          <div class="author">
            
              <img
                class="author_avatar"
                alt="author's avatar"
                src="https://avatars1.githubusercontent.com/u/7558482?s=400&u=21e4cca683799d65a20a4cf3d11d0c17853ef9cb&v=4"
              />
            
            <div>
              Jack Gerrits
            </div>
          </div>
          <div class="blog_highlight">

  <ul>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/releases/tag/9.0.0">GitHub release</a></li>
    <li><a href="https://pypi.org/project/vowpalwabbit/">PyPi</a></li>
    <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/python_8110_900_migration_guide.html">Python 8.11 to 9 migration guide</a></li>
  </ul>

</div>

<p>Vowpal Wabbit 9 is the first major release in <a href="https://github.com/VowpalWabbit/vowpal_wabbit/releases/tag/8.0">over 6 years</a>! There are a number of usability improvements, new reductions, bug fixes and internal improvements here. The Python package has undergone a bit of a modernization with a more understandable module structure, naming and types. Most changes should be non breaking for standard use cases. See <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/python_8110_900_migration_guide.html">here for the migration guide</a>. There is still improvement to be made with Python but this is a good first step towards a more usable package.</p>

<h2 id="breaking-changes">Breaking changes</h2>

<p>This release includes some breaking changes detailed below. Please review them to see if they affect you.</p>

<h3 id="failing-to-open-an-input-file-is-no-longer-ignored"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3571">Failing to open an input file is no longer ignored</a></h3>

<p>In the past if VW was not able to open an input file it would print a message and continue. This usually meant it would fall back to reading from standard input leading to unintuitive behavior. VW will now treat failure to open an input file as an error, produce the appropriate error message and exit.</p>

<h3 id="python27-and-python35-are-no-longer-supported"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3104">Python2.7 and Python3.5 are no longer supported</a></h3>
<p>Python 2.7 and 3.5 are no longer supported. The last release where they were available was 8.11.0. Details on the Python support matrix can be found <a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Python#support">here</a>. Dropping support for these also allows us to begin to introduce new features such as type hints.</p>

<h3 id="python-module-structure">Python module structure</h3>

<p>To align with PEP8 and be more consistent we renamed the following modules.</p>

<ul>
  <li><code class="highlighter-rouge">vowpalwabbit.DFtoVW</code> -&gt;<code class="highlighter-rouge">vowpalwabbit.dftovw</code></li>
  <li><code class="highlighter-rouge">vowpalwabbit.sklearn_vw</code> -&gt;<code class="highlighter-rouge">vowpalwabbit.sklearn</code></li>
</ul>

<p>We did as much as we could to keep the old names accessible. Unfortunately, since some operating systems are case insensitive renaming the <code class="highlighter-rouge">DFtoVW</code> module causes some issues. There may be some ways of importing <code class="highlighter-rouge">vowpalwabbit.DFtoVW</code> that broke in this migration on some operating systems or setups.</p>

<p>For example, the following will be broken and must be changed.</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">vowpalwabbit.DFtoVW</span> <span class="kn">import</span> <span class="n">DFtoVW</span>
<span class="c1"># Change to -&gt;
</span><span class="kn">from</span> <span class="nn">vowpalwabbit.dftovw</span> <span class="kn">import</span> <span class="n">DFtoVW</span>
</code></pre></div></div>

<p>Most of the core objects from <code class="highlighter-rouge">vowpalwabbit.pyvw</code> are now accessible in the root module.</p>

<p>For example the following can now be done:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">vowpalwabbit</span> <span class="kn">import</span> <span class="n">Workspace</span>
<span class="n">workspace</span> <span class="o">=</span> <span class="n">Workspace</span><span class="p">(</span><span class="n">quiet</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="n">workspace</span><span class="p">.</span><span class="n">learn</span><span class="p">(</span><span class="s">'1 | a b c'</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">workspace</span><span class="p">.</span><span class="n">predict</span><span class="p">(</span><span class="s">'| b c'</span><span class="p">))</span>
</code></pre></div></div>

<p>See the <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.html">docs</a> for what is in the root module.</p>
<h3 id="save_resume-is-now-the-default-for-model-saving-and-loading"><code class="highlighter-rouge">save_resume</code> is now the default for model saving and loading</h3>

<p>We have seen confusion around the <strong>old</strong> default behavior that required a flag to be supplied to continue training from a model. We decided (after a <a href="https://github.com/VowpalWabbit/vowpal_wabbit/issues/3163">call for comment</a>) that it makes more sense for the default behavior of VW be to support continuing training when saving and loading a model. This new model is slightly larger, but more flexible. If the previous behavior is required, <code class="highlighter-rouge">--predict_only_model</code> is available. You may want this if you are using the model file in an inference only setup or you have tooling which requires this format.</p>

<p>This will change the format of any readable models by default because more information is saved. If you depend on that format please keep in mind this change.</p>

<h3 id="-q-option-removal"><code class="highlighter-rouge">-q:</code> option removal</h3>
<p><code class="highlighter-rouge">-q:</code> has been removed. This is different to <code class="highlighter-rouge">-q ::</code>, which certainly has not been removed. <code class="highlighter-rouge">-q:</code>  may have been <a href="https://github.com/VowpalWabbit/vowpal_wabbit/commit/e6ea9fd4f75e21507bf4050ece6d80db97907840">added</a> by mistake. It has never actually done anything and is confusing when it is so similar to the very important <code class="highlighter-rouge">-q</code> option.  It has been deprecated for some time and is now removed.</p>

<h3 id="python-label-object-creation-changes"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3615">Python label object creation changes</a></h3>

<p>There is no breaking change if you were using <code class="highlighter-rouge">pyvw.Example.get_label</code>. There is only a change if you directly constructed any label objects.</p>

<p>Label objects in Python have had their <code class="highlighter-rouge">__init__</code> and <code class="highlighter-rouge">from_example</code> functions changed. <code class="highlighter-rouge">__init__</code> no longer accepts a <code class="highlighter-rouge">pyvw.Example</code> object and just accepts that label’s state. <code class="highlighter-rouge">from_example</code> is now a static factory function.</p>

<h3 id="saved-models-now-contain-learning-rate-and-power_t"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3609">Saved models now contain learning rate and power_t</a></h3>

<p>When resuming training a model from a file in the past VW did not remember the learning rate and <code class="highlighter-rouge">power_t</code> used in initial training. VW will not use the same values when the model is loaded. The values can be overridden by supplying a new value on the command line when resuming.</p>

<h3 id="feature-counting-fixes">Feature counting fixes</h3>

<p>A number of fixes were made to the way features are counted which results in different counts in run results, especially around shared examples. This is technically a bug fix but is listed under breaking changes just as an informative notice in case this surprises anyone. Relevant PRs:</p>

<ul>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/2987">refactor: Integrate count and sum feat sq into the interaction generation routine</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3550">fix: feature count for cost sensitive and cb with –noconstant</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3480">feat: Treat features in ccb_slot_namespace as standard features</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3479">fix: fix ccb feature count, remove unnecessary slot copy, fix message</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3470">fix: cb feature count off for shared</a></li>
</ul>

<h3 id="internal-changes">Internal changes</h3>

<p>The following sets of changes are internal breaking changes. These should not affect you unless you depend on any of the C++ code structure. These changes have been marked in the past.</p>

<ul>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3167">refactor!: Remove in_use field</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3164">refactor!: Remove ezexample</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/">refactor!: Remove feature_self_interactions compile time value </a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3166">refactor!: Remove deprecated things in v_array</a></li>
  <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3268">refactor!: remove deprecations targeted for VW 9.0</a></li>
</ul>

<h2 id="highlights">Highlights</h2>

<h3 id="output-options">Output options</h3>

<p>VW’s output has been cleaned up in this release. During default operation VW produces two different streams of output. The driver which contains some initial information, progressive validation and results. The logger which produces info, warning and error information. In the past logging information was not produced in a consistent way. Logging information now has a consistent format and can be controlled.</p>

<ul>
  <li><code class="highlighter-rouge">--quiet</code> - Works the same as before but can be explained as turning off both the driver and log output streams</li>
  <li><code class="highlighter-rouge">--driver_output_off</code> - Will just turn off the driver but leave logging on</li>
  <li><code class="highlighter-rouge">--driver_output &lt;stderr|stdout&gt;</code> (default: <code class="highlighter-rouge">stderr</code>) - Direct driver output to the specified location</li>
  <li><code class="highlighter-rouge">--log_output &lt;stderr|stdout|compat&gt;</code> (default: <code class="highlighter-rouge">stdout</code>) - Direct logging output to the specified location. Or, if <code class="highlighter-rouge">compat</code> is chosen the output location will be what it was in 8.11. Past versions were not consistent about output location and this was added if any user depended on that behavior.
log_output</li>
  <li><code class="highlighter-rouge">--log_level &lt;critical|error|warn|info|off&gt;</code> (default: <code class="highlighter-rouge">info</code>) - Log level to enable.</li>
</ul>

<h3 id="options-reachability-warning">Options reachability warning</h3>

<p>If an option is passed which is definitely not used by any enabled reduction VW will now issue a warning.</p>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vw --epsilon 0.5
</code></pre></div></div>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[warning] Option 'epsilon' depends on another option (or combination of options) which was not supplied. Possible combinations of options which would enable this option are:
	cb_explore_pdf
	warm_cb
	bag, cb_explore_adf
	cb_explore_adf, cover
	cb_explore_adf, first
	cb_explore_adf, synthcover
	cb_explore_adf, rnd
	cb_explore_adf, softmax
	cb_explore_adf
	cb_explore
</code></pre></div></div>

<h3 id="documentation-site">Documentation site</h3>

<p>This is the first release which includes the new <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/index.html">documentation site</a>. We plan on iterating on this and converging documentation over time. The tutorials are now hosted here and redirect from their old locations. The Python based tutorials and examples have links at the top of the page to make the content interactive in the browser. <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/tutorials/python_first_steps.html">Try it out!</a></p>

<h3 id="python-package-now-includes-type-hints">Python package now includes type hints</h3>

<p>Now that Python 2 is no longer supported we were able to add type hints to the Python code base. These typehints are also checked for each commit in CI. They make the <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.html">documentation</a> much clearer too.</p>

<h3 id="python-linux-aarch64-binary-wheels"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3576">Python Linux AArch64 binary wheels</a></h3>

<p>Thanks to <a href="https://github.com/odidev">@odidev</a> the Python package now includes AArch64 binary wheels for Linux.</p>

<h3 id="vowpalwabbitpyvw-class-naming"><code class="highlighter-rouge">vowpalwabbit.pyvw</code> class naming</h3>

<p>Classes in <code class="highlighter-rouge">vowpalwabbit.pyvw</code> have been renamed to match PEP8. The old names are still accessible but are deprecated.</p>

<ul>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.abstract_label">abstract_label</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.AbstractLabel">AbstractLabel</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.simple_label">simple_label</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.SimpleLabel">SimpleLabel</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.multiclass_label">multiclass_label</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.MulticlassLabel">MulticlassLabel</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.multiclass_probabilities_label">multiclass_probabilities_label</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.MulticlassProbabilitiesLabel">MulticlassProbabilitiesLabel</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.cost_sensitive_label">cost_sensitive_label</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.CostSensitiveLabel">CostSensitiveLabel</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.cbandits_label">cbandits_label</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.CBLabel">CBLabel</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.namespace_id">namespace_id</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.NamespaceId">NamespaceId</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.example_namespace">example_namespace</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.ExampleNamespace">ExampleNamespace</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.vw">vw</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.Workspace">Workspace</a></li>
  <li><a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.example">example</a> -&gt; <a href="https://vowpalwabbit.org/docs/vowpal_wabbit/python/latest/reference/vowpalwabbit.pyvw.html#vowpalwabbit.pyvw.Example">Example</a></li>
</ul>

<h3 id="new-reduction-freegrad">New reduction: FreeGrad</h3>

<p>FreeGrad is a new base learner described in <a href="https://arxiv.org/abs/2002.12242">this paper</a>. It can be tried where coin or gradient descent may have been used before.</p>

<p><a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/FreeGrad">Learn more at the wiki page</a></p>

<h3 id="new-experimental-reduction-automl">New <a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Experimental">experimental</a> reduction: AutoML</h3>

<p>AutoML is a new reduction whose primary goal is to provide users with a hands-off method to get an optimal learning configuration without prior experience using VW or an in-depth understanding of their dataset. A “configuration” is a general term which can be extended to any aspect of VW (enabled reduction, # of passes, etc…) but as of now a configuration will specify the set of namespace interactions used in a contextual bandit problem. More specifically, a configuration specifies a set of interactions which will be excluded from the default configuration -q :: (All quadratic interactions).</p>

<p><a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Automl">Learn more at the wiki page</a></p>

<h3 id="new-experimental-reduction-interaction-grounded-learning">New <a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Experimental">experimental</a> reduction: Interaction Grounded Learning</h3>

<p>VW’s learning algorithm attempts to minimize loss, and the contextual bandit input format specifically calls for cost. However, in the setting on reinforcement learning and contextual bandits it is common to use reward in a label for a data point. And for rewards the agent wishes to maximize reward. Accidentally supplying a reward in place of a cost for contextual bandit label in VW will result in incorrect learning as minimizing this value is the opposite of what is intended.</p>

<p>This reduction tracks incoming labels and determines whether they are rewards or costs. Note that because positive value are assumed to be rewards and negative values costs, if your dataset is labelled such that positive values are still costs but are used to penalize the learner then this automatic translation will not work.</p>

<p><a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Interaction-Grounded-Learning">Learn more at the wiki page</a></p>

<h3 id="new-experimental-reduction-baseline-challenger-contextual-bandit">New <a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Experimental">experimental</a> reduction: Baseline Challenger Contextual Bandit</h3>

<p>The reduction builds a CI around the baseline action and use it instead of the policy as the greedy action if its lower bound is higher than the policy expected reward.</p>

<p><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3302">Learn more at the pull request</a></p>

<h3 id="experimental-full-name-interactions"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Experimental">Experimental</a>: Full name interactions</h3>

<p>An experimental new feature which allows interactions to be specified as the entire namespace name instead of just the first character was added. It is specified with the option: <code class="highlighter-rouge">--experimental_full_name_interactions &lt;arg&gt;</code>. The value of <code class="highlighter-rouge">&lt;arg&gt;</code> is the list of namespaces in the interaction separated by <code class="highlighter-rouge">|</code>. For example to interaction two namespaces <code class="highlighter-rouge">Action</code> and <code class="highlighter-rouge">Access</code>: <code class="highlighter-rouge">--experimental_full_name_interactions Action|Access</code>. This new feature allows interactions between namespaces where the first character is the same. In the past that would have needed to be achieved through prefixing the namespaces with a unique character.</p>

<h3 id="python-package-includes-cli-tool">Python package includes CLI tool</h3>
<p>Thanks to @mathcass the <a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3144">Python package includes the CLI tool</a>. There are a few limitations to using this compared to the executable itself which are important to know.</p>

<ul>
  <li>Standard input cannot be used (i.e. redirecting from <code class="highlighter-rouge">cat</code> into the <code class="highlighter-rouge">stdin</code> of the process)</li>
  <li>Options <code class="highlighter-rouge">--onethread</code> and <code class="highlighter-rouge">--args</code> cannot be used</li>
</ul>

<h3 id="experimental-privacy-preserving-learning"><a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Experimental">Experimental</a>: Privacy Preserving Learning</h3>

<p>One of the RLOS projects in 2021 was around privacy preserving learning and was worked on by @manavsinghal157. The feature implements aggregated learning by saving only those features that have seen a minimum threshold of users.</p>

<p>Note: this feature is available behind a compiler flag and is still experimental. See <a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Privacy-Preserving-Learning">wiki page</a> for instructions.</p>

<p><a href="https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Privacy-Preserving-Learning">Learn more at the wiki page</a></p>

<h3 id="0-indexing-for-one-against-all">0-indexing for One-Against-All</h3>

<p>Previously labels had to be 1-indexed for the <code class="highlighter-rouge">oaa</code>, <code class="highlighter-rouge">csoaa</code>, and <code class="highlighter-rouge">csoaa_ldf</code> reductions. Now these reductions can use 0-indexed labels, and report 0-indexed predictions. VW will dynamically detect the indexing of the examples, but you can also set it explicitly with <code class="highlighter-rouge">--indexing 0</code> or <code class="highlighter-rouge">--indexing 1</code>.</p>

<h2 id="thank-you">Thank you</h2>

<p>A huge thank you and welcome to all of the new contributors since the last release:</p>

<ul>
  <li><a href="https://github.com/mathcass">@mathcass</a></li>
  <li><a href="https://github.com/sergeyf">@sergeyf</a></li>
  <li><a href="https://github.com/slahabar">@slahabar</a></li>
  <li><a href="https://github.com/thmavri">@thmavri</a></li>
  <li><a href="https://github.com/dantswain">@dantswain</a></li>
  <li><a href="https://github.com/robotsorcerer">@robotsorcerer</a></li>
  <li><a href="https://github.com/manavsinghal157">@manavsinghal157</a></li>
  <li><a href="https://github.com/zmhammedi">@zmhammedi</a></li>
  <li><a href="https://github.com/aaiyer">@aaiyer</a></li>
  <li><a href="https://github.com/odidev">@odidev</a></li>
  <li><a href="https://github.com/jonpsy">@jonpsy</a></li>
</ul>

<p>And of course thank you to existing contributors:</p>

<ul>
  <li><a href="https://github.com/ataymano">@ataymano</a></li>
  <li><a href="https://github.com/bassmang">@bassmang</a></li>
  <li><a href="https://github.com/cheng-tan">@cheng-tan</a></li>
  <li><a href="https://github.com/etiennekintzler">@etiennekintzler</a></li>
  <li><a href="https://github.com/gramhagen">@gramhagen</a></li>
  <li><a href="https://github.com/kumpera">@kumpera</a></li>
  <li><a href="https://github.com/lalo">@lalo</a></li>
  <li><a href="https://github.com/olgavrou">@olgavrou</a></li>
  <li><a href="https://github.com/peterychang">@peterychang</a></li>
  <li><a href="https://github.com/rajan-chari">@rajan-chari</a></li>
  <li><a href="https://github.com/zwd-ms">@zwd-ms</a></li>
</ul>

<h2 id="full-changelist">Full changelist</h2>

<div>
  <i class="fa fa-caret-right"></i>
  <button class="changelist_button">
    Click here to expand and see the full changelist.
  </button>
</div>
<div class="changelist hidden">

  <h2 id="features">Features</h2>

  <ul>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3660">feat: add some debugging info for cb costs &gt; 1</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3653">feat: exclude ccb namespaces from automl (#3653)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3639">feat: add types to vowpalwabbit.dftovw (#3639)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3609">feat!: Persist learning_rate, power_t, and initial_t for loaded models (#3609)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3629">feat: get_label and get_prediction work the same way, more consistent usage of enums (#3629)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3633">feat: pyvw label accessors for multilabel (#3633)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3632">feat: add cb_eval label accessor and fix CBLabel (#3632)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3627">feat: export CCB types from python package (#3627)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3546">feat: Label accessor for CCB (#3546)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3618">feat: [automl] add confidence interval flag (#3618)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3603">feat: pyvw label accessor for slates (#3603)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3596">feat: pyvw label accessor for continuous actions (#3596)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3599">feat: Update label class names, deprecate old names, add strong typing (#3599)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3581">feat: Use an Enum instead of integers for label and prediction types in Python (#3581)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3586">feat: Separate scored_config from automl (#3586)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3577">feat: Include submodules in main vowpalwabbit package (#3577)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3575">feat: undeprecate chain_hash (#3575)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3563">feat: Add epsilon_reduction_features for decay of exploration (#3563)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3571">feat!: promote failure to open input file from warning to error (#3571)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3529">feat: More consistent and controllable output (#3529)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3463">feat: [automl] add debugging features (#3463)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3504">feat: Warn if options are passed which cannot be reached due to unsupplied necessary args (#3504)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3545">feat: Use label_type to enable shared_feature_merger, Resolves #3512 (#3545)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3533">feat: enable 0-indexed labels for csoaa (#3533)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3515">feat: better error message for as_multiline and as_singleline (#3515)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3514">feat: warn if –quantile_tau is not used (#3514)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3360">feat: ability to capture the audit output using the vwdll api (#3360)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3517">feat: better error message for bfgs dependent options (#3517)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3502">feat!: Remove –save_resume and add –predict_only_model. Resolves: #3163 (#3502)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3067">feat: Added the parameter-free online learning algorithm FreeGrad (#3067)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3334">feat: Privacy Preserving Learning (#3334)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3282">feat: Interaction Grounded Learning (#3282)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3207">feat: print expected input label and output pred type (#3207)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3480">feat: Treat features in ccb_slot_namespace as standard features (#3480)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3462">feat: improve error message when using –passes without cache specified (#3462)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3409">feat: enable 0-indexing for oaa (#3409)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3443">feat: add one_of method, standardize help output, Resolves #3318 (#3443)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3446">feat: [py] add git commit hash to library version (#3446)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3441">feat: [automl] add oracle for all one-diff configs (#3441)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3439">feat: make json parser usable without <code class="highlighter-rouge">all</code> (#3439)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3144">feat: Add vw as python module command (#3144)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3435">feat: Output specific message when stdin is used to try avoid confusion (#3435)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3440">feat: expose holdout sum loss in python bindings (#3440)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3438">feat: [automl] Add feature to clear configs on champ change (#3438)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3366">feat: Support for integer search space, lrq, cubic and lrqfa in vw-hyperopt (#3366)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3414">feat: add output_label and input_prediction (#3414)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3431">feat: add image for prediction and label directionality (#3431)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3419">feat: create interface for metric sink  (#3419)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3418">feat: add conda packaging instructions (#3418)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3411">feat: enable getting label parser by enum type  (#3411)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3410">feat: prefix cache entries with size  (#3410)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3364">feat: Implement wildcard expansion for full name based interactions (#3364)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3396">feat: adds new metric dsjson_sum_cost_original_baseline (#3396)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3380">feat: add trim_whitespace function (#3380)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3302">feat: Add new safety reduction that uses baseline if it is better than the current policy. (#3302)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3252">feat: AutoML interactions (#3252)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3365">feat: Adds new ccb metrics for comparing first slot label with the us… (#3365)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3359">feat: Adds new metric for aggregating original label cost for first slot  (#3359)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3348">feat: support extent based interaction (#3348)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3299">feat: add clamp function to math library and migrate usages (#3299)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3313">feat: create vw-dump-options program to dump all options into json format (#3313)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3294">feat: update active_interactor.py for Python3 (#3294)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3208">feat: extent based namespaces (#3208)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3270">feat: support skip reasons in run_tests.py (#3270)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3267">feat: add save/load to ChiSquared (#3267)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3248">feat: Adding metric for sum of original_label_cost (#3248)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3196">feat: Add ccb namespace benchmarks, generalize example generation (#3196)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3212">feat: VW fuzzer (#3212)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3190">feat: ability to customize learner builder in vw.h (#3190)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3193">feat: Add benchmarks to track full namespace performance (#3193)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3181">feat: [Tutorial] DFtoVW tutorial v2 (#3181)</a></li>
  </ul>

  <h2 id="fixes">Fixes</h2>
  <ul>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3659">fix: learn/predict exceptions were causing a destructor to throw</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3658">fix: only persist learning_rate and power_t for save_resume – also dont dont parse update_options</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3655">fix: report regcb predictions as probabilities (#3655)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3646">fix: support sklearn_vw name (#3646)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3644">fix: fix type and deprecate legacy example construction method (#3644)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3637">fix: a fix for search dep to guarantee actions are valid (#3637)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3636">fix: fix incorrect refactor (#3636)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3638">fix: LDF hooktask usage - undo d30b3045a4ab5edc9550e67df87ade8567459ca4 (#3638)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3617">fix: double free of end_pass example causing tests to fail randomly (#3617)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3613">fix: coin overflowing fix (#3613)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3611">fix: fix <strong>init</strong> args for deprecated classes (#3611)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3606">fix: bfgs cannot load save_resume model (#3606)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3607">fix: replace flatbuffers deprecated Length with size (#3607)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3597">fix: remove std::iterator from slimvw to resolve build issues (#3597)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3593">fix: slim warnings when compiling as 32 bit (#3593)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3605">fix: convert dep list to str before joining (#3605)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3594">fix!: remove deprecated and confusing –q: argument (not -q ::) (#3594)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3591">fix: typo (#3591)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3585">fix: vwdll unit test memory leak (#3585)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3579">fix: don’t produce warning about log_output if a custom trace listener is being used (#3579)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3587">fix: Windows double to float conversion warning (#3587)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3568">fix: windows hidden variable warning (#3568)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3565">fix: Stop search_generate from segfaulting (#3565)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3561">fix: resolve segfaults in test_search (#3561)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3560">fix: Suppress build warnings on windows (#3560)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3557">fix: allow library_example and train.sh to run without fail (#3557)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3554">fix: marginal –invert_hash feature names (#3554)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3552">fix: ill-formatted logger warnings (#3552)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3551">fix: csoaa_ldf rank incorrect action outputs (#3551)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3550">fix: feature count for cost sensitive and cb with –noconstant, Resolves #439 (#3550)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3540">fix: add one_of to dump_options, Resolves: #3526 (#3540)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3544">fix: cats_tree bandwidth overflow, Resolves: #3542 (#3544)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3537">fix: benchmarks ci, revert to non self-hosted runner (#3537)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3536">fix: macos ci by disabling daemon tests (#3536)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3531">fix: update macOS image to 10.15 (#3531)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3528">fix: remove accidentally left in debug print (#3528)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3523">fix: [ci] Attempt to fix flaky Windows build (#3523)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3505">fix: Do not output exception information many times on failure (#3505)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3516">fix: change transitive defaults for label/pred type (#3516)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3518">fix: [automl] use global random_state inst (#3518)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3506">fix: shared_feature_merge should enable if base is of expected type (#3506)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3508">fix: cb/ccb loss fix (#3508)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3490">fix: Deduplicate namespace terms for ignore, ignore_linear, and keep when saving to model and printing out in command line. (#3490)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3484">fix: workaround cache job failures (#3484)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3475">fix: error if wildcard used with lrq and lrqfa (#3475)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3473">fix: Fix feature count when reserved namespaces present (#3473)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3479">fix: fix ccb feature count, remove unnecessary slot copy, fix message (#3479)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3477">fix: warning in search (#3477)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3470">fix: cb feature count off for shared (#3470)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3467">fix: [automl] Update champ change test (#3467)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3464">fix: fix crash in daemon mode children, deadlock in endpass and add logging for any future crashes (#3464)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3461">fix: Add slot_id to total feature count in ccb (#3461)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3213">fix:  (WIP) Fixes for issues found during fuzz testing  (#3213)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3415">fix: inf comparison and nan comparison should work for test diff (#3415)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3413">fix: do not mark example emitted at EOF as newline (#3413)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3407">fix: improve error message when cache file of different VW is loaded (#3407)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3403">fix: change multilabel_oaa probability reporting to 0-index (#3403)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3362">fix: Add –probabilities flag to multilabel_oaa, Resolves #3331 (#3362)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3390">fix: example_is_newline incorrect return type (#3390)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3382">fix: [ccb] emit dsjson_sum_cost_original metric (#3382)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3377">fix: don’t use enabled_reductions in json parser for ccb metrics (#3377)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3343">fix: fix bug where read_lines would ignore given length (#3343)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3350">fix: Fix CCB slot aggregation for original label cost metric (#3350)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3321">fix: active was using inf values for sensitivity (#3321)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3332">fix: <code class="highlighter-rouge">self.classes_[indices]</code> in sklearn VW (#3332)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3319">fix: perf issues found by clang-tidy (#3319)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3298">fix: fix incorrect set of maxk (#3298)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3317">fix: don’t use heap for io_buf (#3317)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3316">fix: fix multiple definitions caused by non-inline header lambdas in benchmarks (#3316)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3301">fix: remove v_array copy from –onethread and std::function from parse_dispatch (#3301)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3290">fix: add back setting active property in reduction setup (#3290)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3292">fix: undo active printing change (#3292)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3293">fix: Use random state in simulator for cross-platform (#3293)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3271">fix: resolve more gcc warnings (#3271)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3272">fix: properly release memory in the event of an error (#3272)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3255">fix: fix warning is search from unsafely using realloc (#3255)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3240">fix: incorrect change of push_at in search (#3240)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3263">fix: move lda above scorer to avoid incorrect application of scorer (#3263)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3259">fix: use reference for pred local variable in cb_dro (#3259)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3254">fix: fix memcpy warning in cc (#3254)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3256">fix: fix two clang-12 warnings (#3256)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3253">fix: clean up cb_dro dependencies (#3253)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3251">fix: missing min compare in ChiSquared impl (#3251)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3233">fix: Catch segfaults dense parameters (#3233)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3236">fix: fix comparator for interactions sorting (#3236)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3229">fix: fix gcc warnings (#3229)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3227">fix: fix fallthrough warning on GCC C++11/C++14 (#3227)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3226">fix: [docs] Update link to Python notebook examples (#3226)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3209">fix: maintain sum_feat_sq in concat and truncate to (#3209)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3210">fix: benchmarks need to call finish to avoid leaking (#3210)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3205">fix: add back check for space names not empty (#3205)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3206">fix: feature_limit gives the unique of the first N not the first N unique features (#3206)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3198">fix: remove commented code (#3198)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3187">fix: lbl_parser should be set after calling setup base (#3187)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3177">fix: add –quiet to cats notebook tutorial (#3177)</a></li>
  </ul>

  <h2 id="other-changes">Other changes</h2>
  <ul>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3647">docs: Add migration guide for python 8.11 to 9 (#3647)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3643">docs: cleanup notebooks and change deprecated messages (#3643)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3645">docs: add types and update docs for pyvw (#3645)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3641">docs: convert from numpydoc to googledoc python docstrings (#3641)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3628">docs: update to match new module structure (#3628)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3634">docs: rename doc -&gt; docs (#3634)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3631">docs: remove placeholder text (#3631)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3621">docs: add docstrings for deprecated classes (#3621)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3582">docs: standardize tutorial titles (#3582)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3580">docs: document pyvw.vw.get_log (#3580)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3578">docs: Update classification notebook (#3578)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3572">docs: help string updates (#3572)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3569">docs: add default values to some options (#3569)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3509">docs: Provide instructions for fixing format issues with container (#3509)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3507">docs: document VW::rand_state (#3507)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3483">docs: update help strings in gd (#3483)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3182">docs: add docs for v_array + small fixes (#3182)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3173">docs: fix path (#3173)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3160">docs: Move examples and tutorials into docs dir (#3160)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3168">docs: Add redirects so old links still work (#3168)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3172">docs: override docs version for push builds (#3172)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3169">docs: Python doc styling (#3169)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3093">docs: Overhaul python documentation (#3093)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3654">refactor: store l1 and l2 as model state and not command line arguments</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3650">refactor: Remove periods from help message (#3650)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3648">refactor: deprecate unused option cb_to_cbadf (#3648)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3624">refactor: CCBLabel enforce outcome exists when asking for it (#3624)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3626">refactor: Use ‘Default’ in help message (#3626)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3623">refactor: change python module names to align with PEP8 (#3623)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3620">refactor: Shorten default and clean help message (#3620)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3615">refactor!: Separate from_example as static method for label classes in pyvw (#3615)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3616">refactor: remove unnecessary parts of pylibvw (#3616)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3612">refactor: Finish python renames (#3612)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3608">refactor: Use cpp label enums in pyvw (#3608)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3595">refactor: don’t support unneeded option types in framework (#3595)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3604">refactor: apply Black python formatting to entire project (#3604)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3601">refactor: make stdout the default for log output (#3601)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3590">refactor: add example_queue_limit option to replace ring_size (#3590)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3592">refactor: compact make_reduction_learner calls where possible (#3592)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3574">refactor: short option name for –log_output (#3574)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3570">refactor: output cleanups (#3570)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3567">refactor: simplify tag printing (#3567)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3564">refactor: Show warning any time –log_output_stream is used (#3564)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3566">refactor: standardize file naming (OjaNewton -&gt; oja_newton) (#3566)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3562">refactor: quiet output for vw unit tests (#3562)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3553">refactor: throw instead of log for cache reading failure (#3553)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3530">refactor: clarify examples and features cache reading and properly cache flat_example (#3530)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3549">refactor: alphabetize vw make (#3549)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3548">refactor: Standardize unit test file naming (tests.cc-&gt;test.cc) (#3548)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3538">refactor: indicies -&gt; indices (#3538)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3535">refactor: Separate csoaa from csoaa_ldf (#3535)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3527">refactor: Use model_utils for label cache (#3527)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3510">refactor: make ‘output’ path mostly const (#3510)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3493">refactor: disable prediction with ccb and cb_type mtr (#3493)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3458">refactor: deprecate ::vw alias (#3458)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3476">refactor: use VW::workspace instead of ::vw (#3476)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3442">refactor: convert RunTests.tt to consume json test description (#3442)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3346">refactor: rename vw -&gt; VW::workspace (#3346)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3434">refactor: Use enum class instead of bare enum (#3434)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3424">refactor: remove redundant read cache parameter (#3424)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3412">refactor: Remove unused enum (#3412)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3408">refactor: move getpid logic to separate function (#3408)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3404">refactor: Make label parsers independent of shared_data and parser  (#3404)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3405">refactor: remove unused members in parser (#3405)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3402">refactor: add label type to learner, encapsulate pred type and multiline (#3402)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3381">refactor: [automl] use read/write_model_field (#3381)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3401">refactor: replace usages of deprecated functions and types (#3401)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3400">refactor: remove setters from learner now that builder migration is complete (#3400)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3397">refactor: Organize core enums (#3397)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3399">refactor: Remove init_learner and all remaining reductions, add label and pred type where possible (#3399)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3389">refactor: move label reporting out of the parse path (#3389)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3393">refactor: [cb] Change defines to cb_type_t enum and add consts (#3393)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3388">refactor: use typed cache operations for slates and ccb cache operations  (#3388)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3387">refactor: make is ring example const (#3387)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3386">refactor: handle read and write separately for model fields (#3386)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3375">refactor: migrate search to reduction builder interface  (#3375)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3376">refactor: remove unused classes from other approaches to extent based interactions (#3376)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3358">refactor: Migrate chisq save_load to process_model_field (#3358)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3357">refactor: Add label and use builder to set learner features in ect, log_multi, recall_tree, warm_cb (#3357)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3342">refactor: change counters to better reflect usage of pool (#3342)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3341">refactor: Add label and use builder to set learner features in kernel_svm, lda_core, lrq, lrqfa, memory_tree (#3341)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3338">refactor: Apply clang-tidy performance fixes (#3338)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3339">refactor: migrate from typedef to using  (#3339)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3329">refactor: make version checking a constexpr operation (#3329)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3326">refactor: use helper method for model variables (#3326)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3330">refactor: Add label and use builder to set learner features in expreplay, gd_mf, get_pmf, interact (#3330)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3325">refactor: remove redunant read message from reading interface (#3325)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3323">refactor: Add label and use builder to set learner features in cs_active and explore_eval (#3323)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3286">refactor: clean up search setup a bit  (#3286)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3314">refactor: explicitly pass buffer into parser read call (#3314)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3310">refactor: Add label and use builder to set learner features in cbzoo and confidence (#3310)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3309">refactor: Add label and use builder to set learner features in cb_to_cb_adf and cbify (#3309)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3284">refactor: migrate svrg to builder (#3284)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3300">refactor: Move empty interaction check into inner scope where size is known (#3300)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3307">refactor: remove dependence on all for get_best_constant (#3307)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3285">refactor: migrate stagewise_poly to builder  (#3285)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3287">refactor: migrate pmf_to_pdf to builder (#3287)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3280">refactor: use override for loss function virtual functions (#3280)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3279">refactor: use vector instead of raw buffer for reading model files (#3279)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3274">refactor: refactor test filtering, add typing (#3274)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3268">refactor!: remove deprecations targeted for VW 9.0 (#3268)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3243">refactor: migrate active  to builder and fix warnings (#3243)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3269">refactor: Use reference in marginal constructor for non-nullable variable (#3269)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3266">refactor: Add label and use builder to set learner features in cb_explore (#3266)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3250">refactor: use new builder for marginal and other fixes (#3250)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3260">refactor: migrate sender to builder (#3260)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3265">refactor: Encapsulate resetting and current file in io_buf (#3265)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3244">refactor: migrate audit_regressor to builder and fix issues (#3244)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3247">refactor: migrate baseline to builder (#3247)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3261">refactor: migrate scorer to builder (#3261)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3264">refactor: Add label and use builder to set learner features in bs, cats, cb_algs (#3264)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3262">refactor: migrate shared_feature_merger to builder (#3262)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3246">refactor: migrate autolink to builder (#3246)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3230">refactor: create text utils and refactor interaction parsing  (#3230)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3228">refactor: prepare interactions for ranges (#3228)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3214">refactor: search’s destructor now cleans up all of its memory (#3214)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3223">refactor: change noop to use new base learner builder (#3223)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3222">refactor: change topk to use new reduction learner builder (#3222)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3218">refactor: Make interactions use iterators (#3218)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3225">refactor: change unit tests to use builders (#3225)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3221">refactor: Add label and use builder to set learner features in cats_pdf.cc (#3221)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3215">refactor: Add label and use builder to set learner features in csoaa.cc (#3215)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3203">refactor: Add label and use builder to set learner features in oaa.cc (#3203)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3211">refactor: Add label and use builder to set learner features in gd.cc (#3211)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3204">refactor: Do feature sort in a more generic way (#3204)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3201">refactor: Add label and use builder to set learner features in ftrl.cc (#3201)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3202">refactor: Use same namespace push/pop code in JSON (#3202)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3191">refactor: Various linting and naming fixes in parse args and related files (#3191)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3189">refactor: rename setup_base to stack_builder (#3189)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3052">refactor: move reduction stack building out of parse_args.cc (#3052)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3180">refactor: replace c-style with c++ casts (#3180)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3166">refactor!: Remove deprecated things in v_array (#3166)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3165">refactor!: Remove feature_self_interactions compile time value  (#3165)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3164">refactor!: Remove ezexample (#3164)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3162">refactor: CCB warnings and lint fixes (#3162)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3176">refactor: remove enabled_reductions from vw/all struct (#3176)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3167">refactor!: Remove in_use field (#3167)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3153">refactor: move to 2d list based grouping of namespaces (#3153)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3157">refactor: add label and use builder to set learner features in sample_pdf.cc (#3157)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3345">perf: create benchmark for sum_ft_squared (#3345)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3558">test: fix error for not found files and fix bash skips (#3558)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3524">test: Allow bash tests to run in parallel (#3524)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3541">test: fix test false positive, add types, use pathlib, change from format to fstrings (#3541)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3500">test: Add in CCB performance audit focusing on no_predict flag (#3500)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3465">test: remove RunTests, update docs, refer to json file directly (#3465)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3454">test: migrate <code class="highlighter-rouge">make test</code> to use run_tests.py (#3454)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3456">test: rename schema to vwtest and use it for extra tests (#3456)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3452">test: use current machine core count as default number of jobs (#3452)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3455">test: don’t crash on optional test fields (#3455)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3450">test: implement extra options -O flag for run_tests.py (#3450)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3426">test: [automl] bump tolerance down (#3426)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3416">test: Add runtests schema and automatically validate in VSCode (#3416)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3398">test: update type in baseline_cb_test (#3398)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3392">test: follow to fix test file that was missed - copyright header and define (#3392)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3391">test: [automl] use vw_math for float comparison (#3391)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3355">test: fix for using -o outside of test dir (#3355)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3353">test: allow tests requiring spanning tree to be skipped (#3353)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3354">test: Use proper substitution names to support run_tests.py (#3354)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3322">test: fix simulator forward declaration (#3322)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3311">test: add cb_sim ref to test callback (#3311)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3303">test: add kill cache to test 344 so it can be rerun without failure (#3303)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3291">test: simulator with per example callback (#3291)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3281">test: unit tests improvements (#3281)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3283">test: add output on failure for test_with_output (#3283)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3273">test: [cpp] add cb explore simulator for unit testing (#3273)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3257">test: [py] add save load test &amp; refactor (#3257)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3635">build: make ensure_cmake_valgrind use -DCMAKE_BUILD_TYPE=Debug (#3635)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3513">build: Separate VWSlim cmake config from the core project (#3513)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3497">build: update instructions for building macos wheels (#3497)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3495">build: Remove tox (#3495)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/2747">build: [Java] Patch to make JNI build work on macos (#2747)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3436">build: cmake don’t run submodule init if files already exist (#3436)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3379">build: allow tests to automatically handle static/shared boost test dependency + fixup copyright header (#3379)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3104">build!: drop support for Python2.7 and Python3.5 (#3104)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3156">build: Create GitHub Action for valgrind (#3156)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3649">ci: dont limit concurrency (#3649)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3642">ci: Add Python CI to produce and verify source distribution (#3642)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3622">ci: run arm python build for each commit (#3622)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3576">ci:Add Linux AArch64 wheel build support (#3576)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3600">ci: fix typecheck ci (#3600)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3498">ci: Build Python 3.10 wheels for Windows (#3498)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3499">ci: Build Python 3.10 wheels for Windows and Linux (#3499)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3487">ci: Add explicit pandas install for benchmark CI (#3487)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3449">ci: remove old valgrind CI (#3449)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3422">ci: enforce Python formatting (#3422)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3349">ci: reuse a single file instead of adding files on each iteration for input format benchmarks (#3349)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3347">ci: cancel previous runs in same PR (#3347)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3344">ci: run benchmark job on self hosted runner (#3344)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3258">ci: Run clang tidy checks for each PR (#3258)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3308">ci: move to Ubuntu18.04 for CI jobs (#3308)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3305">ci: test remove update for python env issue (#3305)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3277">ci: turn on new valgrind script in parallel (#3277)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3276">ci: Change valgrind log path (#3276)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3275">ci: remove Python3.6 from CI (#3275)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3184">ci: Fix Python Windows CI issue (#3184)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3158">ci: remove Azure devops valgrind pipeline (#3158)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3161">ci: mitigate mongodb upgrade failure in MacOS CI (#3161)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3656">chore: update version to 9.0.0 (#3656)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3625">chore: mark automl and baseline challenger as experimental (#3625)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3610">chore: run clang-format over codebase (#3610)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3474">chore: Fix warnings (#3474)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3469">chore: cleanup unused files in test dir and move some files to their place (#3469)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3451">chore: update runtests.AUTOGEN.json (#3451)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3429">chore: [automl] rename test, misnomer (#3429)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3428">chore: [automl] remove commented function (#3428)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3423">chore: format python package (#3423)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3420">chore: format test python files (#3420)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3394">chore: Add snippets for reduction scaffolds (#3394)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3315">chore: add CMakeUserPresets.json to .gitignore (#3315)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3306">chore: bump version of action-semantic-pull-request -&gt; 3.4.2 (#3306)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3295">chore: remove ‘.*’ from .gitignore (#3295)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3583">revert: Revert "feat: [py] add git commit hash to library version (#3446)" (#3583)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3630">Update python_Simulating_a_news_personalization_scenario_using_Contextual_Bandits.ipynb (#3630)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3521">update fuzzer documentation (#3521)</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/unknown">ci: Fix Windows CI issue</a></li>
    <li><a href="https://github.com/VowpalWabbit/vowpal_wabbit/pull/3159">Update valgrind.yml (#3159)</a></li>
  </ul>

</div>

        </div>
        <div class="col-lg-3">
        </div>
      </div>
    </div>
    <div class="container-fluid footer_container">
  <div class="container">
    <div class="row align-items-center justify-content-between">
      <div class="col">
        Microsoft is a major contributor
      </div>
      <div class="col feedback_col">
        <a
          class="feedback_link"
          href="https://github.com/VowpalWabbit/vowpalwabbit.github.io/issues/new"
          target="_blank"
        >
          Feedback
        </a>
      </div>
    </div>
  </div>
</div>

<script src="/assets/js/citation.js"></script>

    <script src="/assets/js/blog.js"></script>
  </body>
</html>
